mass_element_3d Derived Type

type, public, extends(mass_element) :: mass_element_3d

Defines a 3D translational point mass element with x, y, and z translations.


Contents


Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: mass

The mass.

type(material), public :: material

The material.

type(node), public :: node_1

The node to which the mass is attached.


Constructor

public interface mass_element_3d

  • private pure function me3d_init(m, nd) result(rst)

    Initializes a new [[mass_element_3d]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: m

    The mass.

    class(node), intent(in) :: nd

    The node to which the mass is attached.

    Return Value type(mass_element_3d)

    The new [[mass_element_3d]].


Type-Bound Procedures

procedure, public :: constitutive_matrix => me_constitutive_matrix

  • private pure function me_constitutive_matrix(this) result(rst)

    Returns the constitutive matrix. A point mass does not deform; therefore, a zero-valued matrix is returned.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 1-by-1 zero-valued matrix.

procedure, public :: damping_matrix => de_damping_matrix

  • private pure function de_damping_matrix(this) result(rst)

    Returns the element damping matrix. The default implementation returns a zero-valued matrix.

    Arguments

    Type IntentOptional Attributes Name
    class(discrete_element), intent(in) :: this

    The discrete_element object.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The N-by-N damping matrix, where N is the total number of element degrees of freedom.

procedure, public :: evaluate_shape_function => me_shape_function

  • private pure function me_shape_function(this, i, s) result(rst)

    Evaluates the i-th shape function. The single shape function of a point mass is unity.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    integer(kind=int32), intent(in) :: i

    The index of the shape function to evaluate.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinate at which to evaluate the shape function.

    Return Value real(kind=real64)

    The value of the i-th shape function at s.

procedure, public :: external_force_vector => de_ext_force_vector

  • private pure function de_ext_force_vector(this, q, rule) result(rst)

    Returns the element external force vector. Discrete elements do not support distributed loads; therefore, a zero-valued vector is returned. Concentrated loads should be applied directly to the global force vector.

    Arguments

    Type IntentOptional Attributes Name
    class(discrete_element), intent(in) :: this

    The discrete_element object.

    real(kind=real64), intent(in), dimension(:) :: q

    The distributed load vector. This argument is unused and is present for interface compatibility.

    integer(kind=int32), intent(in), optional :: rule

    The integration rule. This argument is unused and is present for interface compatibility.

    Return Value real(kind=real64), allocatable, dimension(:)

    The N-element force vector, where N is the total number of element degrees of freedom.

procedure, public :: get_dimensionality => me3d_dimensionality

  • private pure function me3d_dimensionality(this) result(rst)

    Gets the dimensionality of the element.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element_3d), intent(in) :: this

    The mass_element_3d object.

    Return Value integer(kind=int32)

    The dimensionality.

procedure, public :: get_dof_per_node => me_dof_per_node

  • private pure function me_dof_per_node(this) result(rst)

    Gets the number of degrees of freedom per node. This is equal to the element dimensionality as only translations are considered.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    Return Value integer(kind=int32)

    The number of DOF per node.

procedure, public :: get_node => me_get_node

  • private pure function me_get_node(this, i) result(rst)

    Gets the requested node from the element.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    integer(kind=int32), intent(in) :: i

    The local index of the node to retrieve. This value must be 1.

    Return Value type(node)

    The requested node.

procedure, public :: get_node_count => me_get_node_count

  • private pure function me_get_node_count(this) result(rst)

    Gets the number of nodes for the element.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    Return Value integer(kind=int32)

    The number of nodes.

procedure, public :: get_node_natural_coordinates => de_get_node_natural_coordinates

  • private pure function de_get_node_natural_coordinates(this, i) result(rst)

    Returns the natural coordinate of the requested node. A single-node element has its node at s = 0; a two-node element has its nodes at s = -1 and s = 1, respectively.

    Arguments

    Type IntentOptional Attributes Name
    class(discrete_element), intent(in) :: this

    The discrete_element object.

    integer(kind=int32), intent(in) :: i

    The local index of the node.

    Return Value real(kind=real64), allocatable, dimension(:)

    The natural coordinate of the node.

procedure, public :: jacobian => de_jacobian

  • private pure function de_jacobian(this, s) result(rst)

    Returns the element Jacobian. Discrete elements have no spatial extent; therefore, a unit 1-by-1 Jacobian is returned.

    Arguments

    Type IntentOptional Attributes Name
    class(discrete_element), intent(in) :: this

    The discrete_element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the Jacobian. This argument is unused and is present for interface compatibility.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 1-by-1 Jacobian matrix.

procedure, public :: mass_matrix => me_mass_matrix

  • private pure function me_mass_matrix(this, rule) result(rst)

    Computes the element mass matrix

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    integer(kind=int32), intent(in), optional :: rule

    The integration rule. This argument is unused as the mass matrix is exact.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The D-by-D mass matrix, where D is the element dimensionality.

procedure, public :: shape_function_matrix => me_shape_function_matrix

  • private pure function me_shape_function_matrix(this, s) result(rst)

    Computes the displacement interpolation matrix, which is the D-by-D identity matrix, where D is the element dimensionality.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinate at which to evaluate the matrix.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The D-by-D shape function matrix.

procedure, public :: stiffness_matrix => de_stiffness_matrix

  • private pure function de_stiffness_matrix(this, rule) result(rst)

    Returns the element stiffness matrix. The default implementation returns a zero-valued matrix.

    Arguments

    Type IntentOptional Attributes Name
    class(discrete_element), intent(in) :: this

    The discrete_element object.

    integer(kind=int32), intent(in), optional :: rule

    The integration rule. This argument is unused and is present for interface compatibility.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The N-by-N stiffness matrix, where N is the total number of element degrees of freedom.

procedure, public :: strain => e_strain

  • private pure function e_strain(this, displacement, s) result(rst)

    Computes the element strain at the specified natural coordinate. The strain is

    Arguments

    Type IntentOptional Attributes Name
    class(element), intent(in) :: this

    The element object.

    real(kind=real64), intent(in), dimension(:) :: displacement

    The element displacement vector in the element coordinate system.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the strain.

    Return Value real(kind=real64), allocatable, dimension(:)

    The resulting strain vector.

procedure, public :: strain_displacement_matrix => me_strain_disp_matrix

  • private pure function me_strain_disp_matrix(this, s) result(rst)

    Computes the strain-displacement matrix. A point mass does not deform; therefore, a zero-valued matrix is returned.

    Arguments

    Type IntentOptional Attributes Name
    class(mass_element), intent(in) :: this

    The mass_element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinate at which to evaluate the matrix. This argument is unused.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 1-by-D zero-valued matrix, where D is the element dimensionality.

procedure, public :: stress => e_stress

  • private pure function e_stress(this, displacement, s) result(rst)

    Computes the element stress result at the specified natural coordinate. The stress result is

    Arguments

    Type IntentOptional Attributes Name
    class(element), intent(in) :: this

    The element object.

    real(kind=real64), intent(in), dimension(:) :: displacement

    The element displacement vector in the element coordinate system.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the stress.

    Return Value real(kind=real64), allocatable, dimension(:)

    The resulting stress vector.